home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’96 / Vowel Doubler / Vowel Doubler.c < prev    next >
C/C++ Source or Header  |  1996-06-22  |  2KB  |  69 lines

  1. /****************************************
  2. *    Vowel Doubler - © 1996 Shane D. Looker  All Rights Reserved
  3. *
  4. *  This is a quick hack based on my PatchMaster source. It is compiled
  5. *  under Think Project Manager 7.0.4. It is a fusion of NVls (No Vowels)
  6. *  with a simple PPostEvent.
  7. *
  8. *****************************************/
  9.  
  10. typedef    struct {
  11.     Boolean    isAlive;
  12. } MyGlobal, *MyGlobalP;
  13.  
  14. pascal void main(void);
  15.  
  16.  
  17. pascal void main(void)
  18. {
  19.     Ptr        addr;
  20.     Ptr        globalP;
  21.     long    rD0;
  22.     EventRecord    *rA1;
  23.     
  24.     asm {
  25.         MOVEM.L    A2-A5/D1-D7, -(A7)            /* Save the non-volitle registers         */
  26.         MOVE.L    d0, rD0                        /* Get to d0 & a0 easily */
  27.         MOVE.L    a1, rA1
  28.     }
  29.         
  30.     addr = *(Ptr *)(((Ptr)&main) - 8);        /* Get the address of last filter     */
  31.     globalP = *(Ptr *)(((Ptr)&main) - 4);    /* Get the address of global storage     */
  32.                                             /* The structure is:
  33.                                                     long    last filter address;
  34.                                                     Ptr        globalDataSpace;        */
  35.  
  36.     if ((rA1->what == keyDown) || (rA1->what == autoKey))
  37.     {
  38.         char    theChar = rA1->message & charCodeMask;
  39.         if ((theChar == 'a') || (theChar == 'e') || (theChar == 'i') || (theChar == 'o') || (theChar == 'u')
  40.             || (theChar == 'A') || (theChar == 'E') || (theChar == 'I') || (theChar == 'O') || (theChar == 'U'))
  41.         {
  42.             short    err;
  43.              EvQElPtr    qP;
  44.              
  45.              if (((MyGlobalP)globalP)->isAlive == false)
  46.              {
  47.                 err = PPostEvent(keyDown, /*(0x09 << 8) |*/ theChar, &qP);    /* YAMN - Yet Another Magic Number */
  48.                 if (!err)
  49.                 {
  50.                     qP->evtQWhen = TickCount();
  51.                     qP->evtQModifiers = 0;
  52.                     ((MyGlobalP)globalP)->isAlive = true;
  53.                 }
  54.             }
  55.             else
  56.                 ((MyGlobalP)globalP)->isAlive = false;
  57.         }
  58.         
  59.     }
  60.     
  61.     asm {
  62.             MOVEM.L        (A7)+, A2-A5/D1-D7    /* Restore the non-volitle registers    */
  63.             MOVE.L        rD0, d0
  64.             MOVE.L        rA1, a1
  65.             MOVE.L        addr, A0
  66.             UNLK        A6
  67.             JMP            (A0)        
  68.     };
  69. }